const express = require('express');

var md5 = require('md5');

// 引入数据库集合对象
const adminModel = require('../db/model/adminModel')

// 创建一个路由
const route = express.Router();

// 引入正则校验中间件
const addAdminReg = require("../middleware/addAdminReg")

// 添加管理员接口 (添加正则校验中间件)
route.post('/addAdmin',addAdminReg, async (req, res) => {    //如果校验通过，则中间件中直接next(),继续执行第三个参数（async函数）
    const {
        adminName,
        password,
        regTime
    } = req.body

    // console.log(adminName, password, regTime);

    try {
        // 拿着用户名去数据库的adminModel集合中查询是否存在,findOne如果查询不到返回null
        const findResult = await adminModel.findOne({
            adminName //adminName:adminName  我们在数据中查询adminName的值是否是adminName  对象的简写属性
        }) //这个方法的返回值是promise实例 ，并且使用该方法去数据库查询是个异步的操作，因此需要加上await 来等待该操作执行。

        // 如果查询到了则直接响应该用户名已经注册
        if (findResult) {
            return res.send({ //出现用户已经被注册的提醒就不要再往下走了,所以直接return出来.
                code: 10001,
                msg: '添加管理员-用户已经被注册',
                data: null
            })
        }

        // 如果没有查询到,则向数据库添加该数据 
        await adminModel.create({ //插入数据和find方法查询数据一样的也会返回promise实例
            adminName, //adminName:adminName  添加名为adminName,值为adminName的数据   对象的简写属性
            password: md5(password + '123'), //密码在保存的时候加密并加盐
            regTime
        })

        res.send({
            code: 10000,
            msg: "添加管理员-添加成功",
            data: null
        })
    } catch (e) {
        console.log("添加管理员中出现了异常" + e.message);
        res.send({
            code: 10001,
            msg: "添加管理员-服务端异常",
            data: null
        })
    }

})

module.exports = route;